/***************************************************
 ** Create by Hasaki on 2021/11/25.
 ** This file is part of the CSTL project.
 ** This file follows version 3 of GNU License.
 ** About GNU, see <https://www.gnu.org/licenses/>.
 **
 ** 本文件由Hasaki(间宫羽咲sama)于2021年11月25日创建。
 ** 本文件是CSTL(C-STL)项目的一部分。
 ** 本文件遵从GNU-v3协议。
 ** 关于GNU协议，见<https://www.gnu.org/licenses/>。
 ***************************************************/
#include "HskUtil.h"

size_t HskPower2Ceil(size_t num) {
  // 如果只有0/1个比特为1，说明是2的整幂，返回自身
  if (num == (num & (-num)))
    return num ? num : 0;

  // num共有8 * sizeof(size_t)个bit
  uint8_t ans = 0;
  uint8_t pow = (sizeof(size_t) * 4);
  for ( ; pow; pow >>= 1) {
    if (num >> (ans + pow))   // 如果num >= 2^(ans + pow)
      ans += pow;
  }
  return (1UL << (ans + 1));  // ans = floor(log2(num))
}

